Βελτιστοποίηση Γράφου Ενοτήτων JavaScript: Απλοποίηση Γράφου Εξαρτήσεων | MLOG | MLOG
            document.addEventListener("DOMContentLoaded", function() {
 var lazyloadImages = document.querySelectorAll("img.lazy");

 function lazyload () {
 lazyloadImages.forEach(function(img) {
 if (img.offsetTop < (window.innerHeight + window.pageYOffset)) {
 img.src = img.dataset.src;
 img.classList.remove("lazy");
 }
 });
 if(lazyloadImages.length === 0) {
 document.removeEventListener("scroll", lazyload);
 window.removeEventListener("resize", lazyload);
 window.removeEventListener("orientationChange", lazyload);
 }
 }

 document.addEventListener("scroll", lazyload);
 window.addEventListener("resize", lazyload);
 window.addEventListener("orientationChange", lazyload);
 });
            

Πρακτική Συμβουλή: Υλοποιήστε lazy loading για εικόνες, βίντεο και άλλους πόρους που δεν είναι άμεσα ορατοί στην οθόνη. Εξετάστε τη χρήση βιβλιοθηκών όπως το `lozad.js` ή τα εγγενή χαρακτηριστικά lazy-loading του προγράμματος περιήγησης.

6. Tree Shaking και Αφαίρεση Νεκρού Κώδικα

Το tree shaking είναι μια τεχνική που αφαιρεί τον αχρησιμοποίητο κώδικα από την εφαρμογή σας κατά τη διαδικασία του build. Αυτό μπορεί να μειώσει σημαντικά το μέγεθος του bundle, ειδικά αν χρησιμοποιείτε βιβλιοθήκες που περιλαμβάνουν πολύ κώδικα που δεν χρειάζεστε.

Παράδειγμα:

Υποθέστε ότι χρησιμοποιείτε μια βιβλιοθήκη βοηθητικών προγραμμάτων που περιέχει 100 συναρτήσεις, αλλά εσείς χρησιμοποιείτε μόνο 5 από αυτές στην εφαρμογή σας. Χωρίς tree shaking, ολόκληρη η βιβλιοθήκη θα συμπεριλαμβανόταν στο bundle σας. Με το tree shaking, θα συμπεριληφθούν μόνο οι 5 συναρτήσεις που χρησιμοποιείτε.

Ρύθμιση παραμέτρων:

Βεβαιωθείτε ότι ο bundler σας είναι ρυθμισμένος για να εκτελεί tree shaking. Στον webpack, αυτό είναι συνήθως ενεργοποιημένο από προεπιλογή όταν χρησιμοποιείται η κατάσταση παραγωγής (production mode). Στον Rollup, μπορεί να χρειαστεί να χρησιμοποιήσετε το plugin `@rollup/plugin-commonjs`.

Πρακτική Συμβουλή: Ρυθμίστε τον bundler σας για να εκτελεί tree shaking και βεβαιωθείτε ότι ο κώδικάς σας είναι γραμμένος με τρόπο συμβατό με το tree shaking (π.χ., χρησιμοποιώντας ενότητες ES).

7. Ελαχιστοποίηση Εξαρτήσεων

Ο αριθμός των εξαρτήσεων στο έργο σας μπορεί να επηρεάσει άμεσα την πολυπλοκότητα του γράφου ενοτήτων. Κάθε εξάρτηση προστίθεται στον γράφο, αυξάνοντας ενδεχομένως τους χρόνους build και το μέγεθος του bundle. Ελέγχετε τακτικά τις εξαρτήσεις σας και αφαιρέστε όσες δεν χρειάζονται πλέον ή μπορούν να αντικατασταθούν με μικρότερες εναλλακτικές.

Παράδειγμα:

Αντί να χρησιμοποιείτε μια μεγάλη βιβλιοθήκη βοηθητικών προγραμμάτων για μια απλή εργασία, εξετάστε το ενδεχόμενο να γράψετε τη δική σας συνάρτηση ή να χρησιμοποιήσετε μια μικρότερη, πιο εξειδικευμένη βιβλιοθήκη.

Πρακτική Συμβουλή: Ελέγχετε τακτικά τις εξαρτήσεις σας χρησιμοποιώντας εργαλεία όπως το `npm audit` ή το `yarn audit` και εντοπίστε ευκαιρίες για να μειώσετε τον αριθμό των εξαρτήσεων ή να τις αντικαταστήσετε με μικρότερες εναλλακτικές.

8. Ανάλυση Μεγέθους Bundle και Απόδοσης

Αναλύετε τακτικά το μέγεθος του bundle και την απόδοσή σας για να εντοπίσετε τομείς για βελτίωση. Εργαλεία όπως το webpack-bundle-analyzer και το Lighthouse μπορούν να σας βοηθήσουν να εντοπίσετε μεγάλες ενότητες, αχρησιμοποίητο κώδικα και σημεία συμφόρησης στην απόδοση.

Παράδειγμα (webpack-bundle-analyzer):

Προσθέστε το plugin `webpack-bundle-analyzer` στη ρύθμιση του webpack.

            const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
 // ... other webpack configuration
 plugins: [
 new BundleAnalyzerPlugin()
 ]
};

            

Όταν εκτελείτε το build σας, το plugin θα δημιουργήσει ένα διαδραστικό treemap που δείχνει το μέγεθος κάθε ενότητας στο bundle σας.

Πρακτική Συμβουλή: Ενσωματώστε εργαλεία ανάλυσης του bundle στη διαδικασία του build σας και ελέγχετε τακτικά τα αποτελέσματα για να εντοπίσετε τομείς για βελτιστοποίηση.

9. Module Federation

Το Module Federation, μια δυνατότητα του webpack 5, σας επιτρέπει να μοιράζεστε κώδικα μεταξύ διαφορετικών εφαρμογών κατά το χρόνο εκτέλεσης. Αυτό μπορεί να είναι χρήσιμο για την κατασκευή microfrontends ή για τον διαμοιρασμό κοινών components μεταξύ διαφορετικών έργων. Το Module Federation μπορεί να βοηθήσει στη μείωση του μεγέθους των bundles και στη βελτίωση της απόδοσης, αποφεύγοντας την επανάληψη του κώδικα.

Παράδειγμα (Βασική Ρύθμιση Module Federation):

Εφαρμογή A (Host):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appA",
 remotes: {
 appB: "appB@http://localhost:3001/remoteEntry.js",
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Εφαρμογή B (Remote):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appB",
 exposes: {
 './MyComponent': './src/MyComponent',
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Πρακτική Συμβουλή: Εξετάστε το ενδεχόμενο χρήσης του Module Federation για μεγάλες εφαρμογές με κοινό κώδικα ή για την κατασκευή microfrontends.

Συγκεκριμένες Θεωρήσεις για τους Bundlers

Διαφορετικοί bundlers έχουν διαφορετικά δυνατά και αδύνατα σημεία όσον αφορά τη βελτιστοποίηση του γράφου ενοτήτων. Ακολουθούν ορισμένες συγκεκριμένες θεωρήσεις για δημοφιλείς bundlers:

Webpack

Rollup

Parcel

Παγκόσμια Προοπτική: Προσαρμογή Βελτιστοποιήσεων σε Διαφορετικά Πλαίσια

Κατά τη βελτιστοποίηση των γράφων ενοτήτων, είναι σημαντικό να λαμβάνεται υπόψη το παγκόσμιο πλαίσιο στο οποίο θα χρησιμοποιηθεί η εφαρμογή σας. Παράγοντες όπως οι συνθήκες δικτύου, οι δυνατότητες των συσκευών και τα δημογραφικά στοιχεία των χρηστών μπορούν να επηρεάσουν την αποτελεσματικότητα των διαφόρων τεχνικών βελτιστοποίησης.

Συμπέρασμα

Η βελτιστοποίηση του γράφου ενοτήτων JavaScript είναι μια κρίσιμη πτυχή της ανάπτυξης front-end. Απλοποιώντας τις εξαρτήσεις, αφαιρώντας τις κυκλικές εξαρτήσεις και υλοποιώντας το code splitting, μπορείτε να βελτιώσετε σημαντικά την απόδοση του build, να μειώσετε το μέγεθος του bundle και να ενισχύσετε τους χρόνους φόρτωσης της εφαρμογής. Αναλύετε τακτικά το μέγεθος του bundle και την απόδοσή σας για να εντοπίσετε τομείς για βελτίωση και προσαρμόστε τις στρατηγικές βελτιστοποίησής σας στο παγκόσμιο πλαίσιο στο οποίο θα χρησιμοποιηθεί η εφαρμογή σας. Να θυμάστε ότι η βελτιστοποίηση είναι μια συνεχής διαδικασία, και η συνεχής παρακολούθηση και βελτίωση είναι απαραίτητες για την επίτευξη βέλτιστων αποτελεσμάτων.

Εφαρμόζοντας με συνέπεια αυτές τις τεχνικές, οι προγραμματιστές παγκοσμίως μπορούν να δημιουργήσουν ταχύτερες, πιο αποδοτικές και πιο φιλικές προς τον χρήστη διαδικτυακές εφαρμογές.